package com.log6z.dashborad.utils;

import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;

import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * hutool的excel导出工具类
 */
public class ExcelExportUtils {

    /**
     * 常规导出
     * 导出的时候，会自动在文件名加入时间的long数字
     * 比如你的文件名是cat.xlsx，那么导出时会cat1686631372689.xlsx
     *
     * @param response
     * @param fileName  需要导出的文件名，导出的时候，会自动在文件名加入时间的long数字
     * @param headerMap 表头的map, 使用LinkedHashMap保证顺序
     * @param dataList  要导出的数据
     * @throws Exception
     */
    public static void export(HttpServletResponse response, String fileName, Map<String, String> headerMap, List dataList) throws Exception {

        // 设置响应类型
        response.setContentType("application/vnd.ms-excel");
        // 设置字符编码
        response.setCharacterEncoding(StandardCharsets.UTF_8.toString());
        // 设置响应头信息
        fileName += new Date().getTime();
        fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()) + ".xlsx";
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);

        // 写入文件
        ExcelWriter writer = ExcelUtil.getWriter();

        //设置表格头
        for (Map.Entry<String, String> entry : headerMap.entrySet()) {
            writer.addHeaderAlias(entry.getKey(), entry.getValue());
        }

        //输出
        writer.write(dataList, Boolean.TRUE);
        writer.flush(response.getOutputStream(), Boolean.TRUE);
        writer.close();
    }

}
